home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / 3dkit1.zip / XYZTO3DV.C < prev    next >
Text File  |  1992-05-25  |  2KB  |  78 lines

  1. /* XYZto3DV  -  convert XYZ editor binary (.3DL) output to 3DV */
  2.  
  3. /* Oscar Garcia <garciao@mof.govt.nz>, May 1992 */
  4.  
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <io.h>
  8. #include <alloc.h>
  9. #include <fcntl.h>
  10.  
  11. #define USAGE "usage: XYZto3DV [infile [outfile]]\n\
  12. \tIf file names are omitted, the standard i/o streams are used.\n"
  13.  
  14. #define ERROR(msg) {fputs(msg,stderr),exit(1);}
  15. #define PERROR(msg) {perror(msg),exit(1);}
  16.  
  17.  
  18. void main(int argc, char* argv[])
  19. {
  20.     unsigned i, j, m, n;
  21.     int  *x;
  22.     unsigned long memory;
  23.     FILE *input = stdin, *output = stdout;
  24.  
  25.     /* open files */
  26.     if (argc > 3)
  27.         ERROR(USAGE);   /* wrong arguments */
  28.     if (argc > 1)
  29.     {    input = fopen(argv[1], "rb");
  30.         if (input == NULL)
  31.         {    fputs("Can't open input file\n", stderr);
  32.             ERROR(USAGE);
  33.         }
  34.     }
  35.     else
  36.         setmode(0, O_BINARY);
  37.     if (argc > 2)
  38.     {    output = fopen(argv[2], "wt");
  39.         if (output == NULL)
  40.             ERROR("Can't open output file");
  41.     }
  42.  
  43.     /* get points */
  44.     memory = coreleft() - 999;
  45. #ifdef __MSDOS__
  46.     if (memory > 0xfff0U)
  47.         memory = 0xfff0U;
  48. #endif
  49.     m = memory / sizeof(int);
  50.     x = (int*)malloc(m * sizeof(int));
  51.     for (i = 0; feof(input) == NULL && i < m; i++)
  52.         x[i] = getw(input);
  53.     if (ferror(input))
  54.         PERROR("Input error");
  55.     fclose(input);
  56.     if (i >= m)
  57.         ERROR("Out of memory");
  58.     n = (i-1)/7;    /* number of segments */
  59.     m = 7 * n;
  60.     if (m != i-1)
  61.         fputs("Warning! Wrong number of items in input\n", stderr);
  62.  
  63.     /* output points */
  64.     fprintf(output, "%d\n", 2 * n);        /* number of points */
  65.     for (i = 0; i < m; i += 7)
  66.         fprintf(output, "%d %d %d\n%d %d %d\n", x[i], x[i+1], x[i+2],
  67.             x[i+3], x[i+4], x[i+5]);
  68.  
  69.     /* output lines */
  70.     fprintf(output, "%d\n", 2 * n);        /* number of moves/draws */
  71.     for (i = 6, j = 1; i < m; i += 7, j += 2)
  72.         fprintf(output, "%d 0\n%d %d\n", j, j+1, x[i]);
  73.  
  74.     if (ferror(output))
  75.         PERROR("Error on output");
  76.     fclose(output);
  77. }
  78.